package com.atguigu.controller;

import com.atguigu.pojo.Account;
import com.atguigu.service.AccountService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 客户端请求和相应的处理器
 * 相应客户的数据全部是Json
 *
 * @RestController = @Controller + @ResponseBody (方法返回值，转成Json相应)
 */
@RequestMapping("account")
@RestController
public class AccountController {
    @Autowired
    private AccountService accountService;
    /**
     * 处理器方法，实现数据删除
     * 接收客户端的请求参数，就是id值
     */
    @RequestMapping("deleteAccount")
    public String deleteAccount(Integer id){
        int i = accountService.deleteAccount(id);
        if (i > 0)
            return "删除成功";
        return "删除失败";
    }


    /**
     * 处理器方法，实现数据更新
     * 接收客户端的请求参数，参数pojo对象，Json个数
     */
    @RequestMapping("updateAccount")
    public String updateAccount(@RequestBody Account account){
        int i = accountService.updateAccount(account);
        if (i > 0)
            return "更新成功";
        return "更新失败";
    }

    /**
     * 处理器方法，实现主键查询
     * 接收请求参数，id值，主键
     * 返回Account对象
     */
    @RequestMapping("queryAccountById")
    public Account queryAccountById(Integer id){
        return accountService.queryAccountById(id);
    }

    /**
     * 处理器方法，实现新增账户数据
     * 接收请求参数，是pojo对象，请求的数据格式是Json
     */
    @RequestMapping("insertAccount")
    public String insertAccount( @RequestBody Account account){
        int row = accountService.insertAccount(account);
        if (row > 0)
            return "添加成功";
        return "添加失败";
    }

    /**
     * 处理器方法，实现账户数据的查询，带分页
     * 接收客户端的请求参数：当前页数
     * 响应Json数据，分页助手的类 PageInfo
     */
    @RequestMapping("queryAccountByPage")
    public PageInfo<Account> queryAccountByPage(Integer currentPage){
        //客户端没有传递参数，默认为1
        if (currentPage == null)
            currentPage = 1;
        //调用业务层，传递当前的页数，和每页显示的条数
        //获取业务层返回的PageInfo对象，存储分页数据的对象
        Integer pageSize = 3;
        PageInfo<Account> pageInfo = accountService.queryAccountByPage(currentPage, pageSize);
        return pageInfo;
    }

}
